3383-Transit Tree Path


本文总阅读量

题意:通过顶点k,顶点x到顶点y的距离。
询问次数最高为105的次,所以不可能每次去搜索,这样时间复杂度为O(QN),必然会超时。
因为k这个点只有一个,换个角度思考,把这个点当成根节点,然后计算出k到其他节点的距离,这样询问的时候,直接把距离相加即可,询问回答的时间复杂度为O(1),时间复杂度为O(N+Q)
定义intlonglong

#define int long long

main()返回值不能为longlong
所以,用单整型定义main()返回值。

signed main()
{

}

邻接表定义
第一个字段节点编号,第二个字段为边权。

vector<pair<int,int> > G[maxn]; //在这里int为long long

构图

	for(int i = 1,x,y,w; i < n; i++){
		cin>>x>>y>>w;
		G[x].push_back({y,w});
		G[y].push_back({x,w});
	}

图的遍历

void dfs(int x, int fa, int d) //x为当前节点,fa为x的父节点编号,d为从根节点到x的距离
{
	dis[x] = d;
	for(auto y:G[x]){
		if(y.first!=fa){
			dfs(y.first,x,d+y.second);
		}
	}
}

本站总访问量